import os
import pytest
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
from httprunner.models import TStep
from httprunner.step_request import StepRequestValidation

from runner_sync import HttpRunnerSync
import pytest


# 继承Httprunner类


class TestLogin(HttpRunnerSync):
    config = (Config('登录用例')  # 用例名称
              .base_url('http://192.168.8.5:9005')  # 域名地址
              .verify(False)  # https验证开关
              .variables(**{'user': 'test', 'pwd': 123456})  # 全局变量
              .export('token')  # 将token设置为全局变量
              )
    # 测试步骤，是一个list，里面可以有多个步骤用例
    teststeps = [
        Step(  # 每一个step，代表一个用例
            # RunRequest类用来发送请求
            RunRequest('step-login-sync')  # 步骤名称
            .get('/user/1')  # 请求方式 / 接口地址
            # .with_data({'username': '$user', 'password': '$pwd'})  # 请求参数
            # 返回值提取
            .extract()
            # 返回值使用jmespath表达式提取: 表达式，变量名
            .with_jmespath('body.groupId', 'groupId1')

            # 断言
            .validate()
            .assert_equal('body.userId', 1, message='code不正确')
        ),
        Step(  # 每一个step，代表一个用例
            # RunRequest类用来发送请求
            RunRequest('step-login-sync')  # 步骤名称
            .get('/user/1')  # 请求方式 / 接口地址
            # .with_data({'username': '$user', 'password': '$pwd'})  # 请求参数
            # 返回值提取
            .extract()
            # 返回值使用jmespath表达式提取: 表达式，变量名
            .with_jmespath('body.groupId', 'groupId2')

            # 断言
            .validate()
            .assert_equal('body.userId', 1, message='code不正确')
        ),
        Step(  # 每一个step，代表一个用例
            # RunRequest类用来发送请求
            RunRequest('step-login')  # 步骤名称
            .get('/user/2')  # 请求方式 / 接口地址
            # .with_data({'username': '$user', 'password': '$pwd'})  # 请求参数
            # 返回值提取
            .extract()
            # 返回值使用jmespath表达式提取: 表达式，变量名
            .with_jmespath('body.groupId', 'groupId')
            # 断言
            .validate()
            .assert_not_equal('$groupId1', '$groupId2', message='两个请求相同')
        ),
    ]

if __name__ == '__main__':
    pytest.main([ "httprunner_case.py", "--alluredir", "./temp", "--clean-alluredir"])
    os.system("allure generate ./temp -o ./report -c")
    os.system("allure open ./report")

    # pytest httprunner_case.py --alluredir ./temp --clean-alluredir